package cn.kattomy.shop.user.dao;

import java.util.List;

import cn.kattomy.shop.user.vo.User;

public interface UserDao {

	/**
	 * 根据'用户名'查询用户对象 User
	 * @param username 
	 * @return User 对象
	 */
	public User queryUserByUsername(String username);

	/**
	 * 将传入的 User 对象保存到数据库中 或 更新数据库中已有的对象
	 * @param user
	 */
	public void saveOrUpdate(User user);

	/**
	 * 根据'激活码'查询用户对象 User
	 * @param code
	 * @return User 对象
	 */
	public User queryUserByCode(String code);

	/**
	 * 根据传入的不完全的 User 对象返回数据库中对应的 User 对象完全体,无对应对象则返回 null.
	 * <br/>
	 * 无对应对象的可能性有以下几种：
	 * <br/>
	 * 1.数据库中没有与查询 User 对象 username 相匹配的 User 对象
	 * <br/>
	 * 2.数据库中存在该 User 对象,但该 User 对象的 State 值等于 0
	 * <br/>
	 * 3.数据库中存在该 User 对象,但该 User 对象的 username 与 password 字段不匹配
	 * @param user
	 * @return User 对象完全体 or null
	 */
	public User queryUserByMultiCondition(User user);

	/**
	 * 查询所有的用户的集合
	 * @return
	 */
	public List<User> findAll();

	/**
	 * 类似 queryUserByMultiCondition 但匹配字段改为 email 与 password
	 * 根据传入的不完全的 User 对象返回数据库中对应的 User 对象完全体,无对应对象则返回 null.
	 * <br/>
	 * 无对应对象的可能性有以下几种：
	 * <br/>
	 * 1.数据库中没有与查询 User 对象 email 相匹配的 User 对象
	 * <br/>
	 * 2.数据库中存在该 User 对象,但该 User 对象的 State 值等于 0
	 * <br/>
	 * 3.数据库中存在该 User 对象,但该 User 对象的 username 与 password 字段不匹配
	 * @param user
	 * @return User 对象完全体 or null
	 */
	public User queryUserByMultiCondition2(User user);

	/**
	 * 根据'邮箱'查询用户对象 User
	 * @param username 
	 * @return User 对象
	 */
	public User queryUserByEmail(String email);
	

}
